import com.baoxian.workschedule.TaskWorkSchedule
import com.baoxian.workschedule.util.ConstantsUtil

/**
 * Desc: 
 * User: ZhengCongChun
 * Date: 13-9-1
 * Time: 下午6:16
 * @Version 1.0
 */
class TaskWorkScheduleAutoTest extends GroovyTestCase {
    /**
     * 测试公共 节假日
     *  <holiday>
     <startDate>2013-10-01</startDate>
     <endDate>2013-10-07</endDate>
     <startTime>08:30</startTime>
     <endTime>18:00</endTime>
     </holiday>
     ************ PASS ************
     */
    public void testIsCapProcessTaskGlobalHoliday() {
        String orgId = "1211000000" //北京泛联平台 08:30-17:30
        String nationalDay =   "2013-10-02 19:35:20"  //国庆
        processFalseTask(orgId,nationalDay)

        log.info("======================周末=====================")

        String weekend =   "2013-09-08 11:35:20" //周末
        processFalseTask(orgId,weekend)

        log.info("======================中秋=====================")

        String midAutumn =   "2013-09-20 11:35:20" //中秋
        processFalseTask(orgId,midAutumn)

        log.info("======================非工作时间=====================")

        String nonWorkTime = "2013-09-05 07:30:22" //非工作时间
        processFalseTask(orgId, nonWorkTime)
    }

    /**
     * 测试属于特别指定节假日
     * <specialHoliday>
     <startDate>2013-07-22</startDate>
     <endDate>2013-07-26</endDate>
     <startTime>08:30</startTime>
     <endTime>18:00</endTime>
     </specialHoliday>
     ************ PASS ************
     *
     */
    public void testIsCapProcessTaskSpecialHoliday() {
        String orgId = "1244100000" //广州华杰平台 08:30-18:00
        String dateStr ="2013-09-20 18:19:17"
        processFalseTask(orgId,dateStr)
    }

    /**
     * 测试属于特别指定工作日   正常时间范围
     * <specialWorkDayTime>
     <startDate>2013-08-05</startDate>
     <endDate>2013-08-11</endDate>
     <startTime>08:30</startTime>
     <endTime>12:00</endTime>
     </specialWorkDayTime>
     ************ PASS ************
     *
     */
    public void testIsCapProcessTaskSpecialWorkDay() {
        String orgId = "3000000000" //中国太平洋财产保险股份有限公司 08:30-18:00
        String dateStr ="2013-09-29 10:19:17"    //正常时间
        processTrueTask(orgId,dateStr)
    }

    /**
     * 测试属于特别指定工作日    与非正常时间范围
     * <specialWorkDayTime>
     <startDate>2013-08-05</startDate>
     <endDate>2013-08-11</endDate>
     <startTime>08:30</startTime>
     <endTime>12:00</endTime>
     </specialWorkDayTime>
     ************ PASS ************
     *
     */
    public void testIsCapProcessTaskSpecialNonWorkTime() {
        String orgId = "1244000000" //广东南枫平台 08:30-18:00
        String dateStr ="2013-09-22 18:05:30"    //非工作时间
        processFalseTask(orgId,dateStr)
    }

    /**
     * 测试属于正常 时间工作日范围内的 （周一至五）
     ************ PASS ************
     *
     */
    public void testIsCapProcessTaskCommonWeekDay() {
        // TaskWorkSchedule taskWorkSchedule= TaskWorkSchedule.getInstance()
        String orgId = "1221000000" //沈阳方大平台 08:30-19:00
//        String dateStr ="2013-09-06 11:19:17"    //正常时间 周五
        String dateStr ="2013-09-06 08:30:01"    //非工作时间    周五
        processTrueTask(orgId,dateStr)
        processFalseTask(orgId, "2013-09-02 08:00:00")
        processTrueTask(orgId, "2013-09-03 10:00:00")
        processTrueTask(orgId, "2013-09-04 12:00:00")
        processTrueTask(orgId, "2013-09-05 13:00:00")
        processTrueTask(orgId, "2013-09-06 18:29:59")
    }

    /**
     *    周未特别指定时间
     ************ PASS ************
     *
     */
    public void testIsCapProcessTaskSpecialWeekend() {
        String orgId = "1237000000"  //山东民泰平台 周末 09:00-17:00
        String dateStr ="2013-09-07 08:19:17"    //正常时间 周五
        // String dateStr ="2013-09-06 13:19:17"    //非工作时间    周五
//        processFalseTask(orgId,dateStr)
        processTrueTask(orgId, "2013-09-08 16:59:17")
    }


    /**
     *  测试 机构  配置
     *************当重复任务时       程序以后面配置的为准 ********
     * PASS
     */
    public void testIsCapProcessTaskRepeatTask() {
        String orgId = "1251000000" //四川泛华平台 paymentTask 09:00-17:30
        String dateStr ="2013-09-03 08:19:17"    //正常时间 周二
        // String dateStr ="2013-09-03 18:19:17"    //非工作时间    周二
//        processTrueTask(orgId, dateStr)
        processFalseTask(orgId,dateStr)
    }

    /**
     *  测试 机构  配置
     * ***********当机构节点未配置时      程序返回未配置，任务可做*************
     * PASS
     */
    public void testIsCapProcessTaskNoConfig() {
        String orgId = "122100000012323sdf" //配置不存在机构节点
        String dateStr ="2013-09-03 12:19:17"    //正常时间 周二
        // String dateStr ="2013-09-03 18:19:17"    //非工作时间    周二
        processTrueTask(orgId,dateStr)
    }

    /**
     *  测试 机构  配置
     * ***********当同时有两个机构节点时   程序最后配置的节点为准***************
     * PASS
     */
    public void testIsCapProcessTaskRepeatOrg() {
        String orgId = "3000000332" //西蜀平台 配置两个机构节点
        String normal ="2013-09-04 08:50:17"    //正常时间 周二
        processFalseTask(orgId, normal)

        String nonNormal ="2013-09-03 15:19:17"    //非工作时间    周二
        processTrueTask(orgId,nonNormal)
    }

    /**
     * @param 判断是可以处理的任务
     * @param dateStr
     */
    public void processTrueTask(String orgId ,String dateStr){
        TaskWorkSchedule taskWorkSchedule= TaskWorkSchedule.getInstance()
        Map<String, Object> result = null
        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_VERIFY,dateStr)      //初审
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_VERIFY + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_QUOTE,dateStr)  //报价
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_QUOTE + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INSURE,dateStr)  //核保
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_INSURE + "    " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_PAYMENT,dateStr)  //支付
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_PAYMENT + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_SECOND_PAYMENT,dateStr)  //二次支付
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_SECOND_PAYMENT + "    " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_UNDERWRITE,dateStr)  //承保
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_UNDERWRITE + " " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INS_POLICY_SYNC,dateStr)  //录单
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_INS_POLICY_SYNC + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INS_POLICY_PRINTING,dateStr)  //打单
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_INS_POLICY_PRINTING + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_DELIVERY,dateStr)  //配送
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_DELIVERY + "    " + result)
    }

    /**
     * 判断是不可以处理的任务
     * @param orgId
     * @param dateStr
     */
    public void processFalseTask(String orgId ,String dateStr){
        TaskWorkSchedule taskWorkSchedule= TaskWorkSchedule.getInstance()
        Map<String, Object> result = null
        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_VERIFY,dateStr)      //初审
          assertNotNull(result)
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_VERIFY + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_QUOTE,dateStr)  //报价
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_QUOTE + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INSURE,dateStr)  //核保
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_INSURE + "    " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_PAYMENT,dateStr)  //支付
        assertFalse(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_PAYMENT + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_SECOND_PAYMENT,dateStr)  //二次支付
        assertFalse(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info( ConstantsUtil.TASK_TYPE_SECOND_PAYMENT + "    " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_UNDERWRITE,dateStr)  //承保
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_UNDERWRITE + "    " + result)

        result= taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INS_POLICY_SYNC,dateStr)  //录单
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_INS_POLICY_SYNC + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_INS_POLICY_PRINTING,dateStr)  //打单
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_INS_POLICY_PRINTING + "    " + result)

        result=  taskWorkSchedule.isCanProcessTask(orgId, ConstantsUtil.TASK_TYPE_DELIVERY,dateStr)  //配送
        assertTrue(result?.get(ConstantsUtil.IS_CAN_PROCESS))
        log.info(ConstantsUtil.TASK_TYPE_DELIVERY + "    " + result)
    }
}
